home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: delta / whiteline CD Series - delta.iso / progtool / modula2 / module / menuevnt.mod < prev    next >
Text File  |  1995-11-25  |  12KB  |  331 lines

  1. IMPLEMENTATION MODULE MenuEvnt;
  2. FROM SYSTEM IMPORT VAL,ADDRESS;
  3. FROM MindMachine IMPORT HaraldWessbacher,LutzMehlhorn,MidsummerNight,
  4.                         EarthHarmonie,FrequenzGangARRAY,Change,
  5.                         RuhevolleWachheit,AllgBenutzung,Anregung;
  6. FROM EasyDialog IMPORT DoMoveDialog,and,GetText,SetText,IsSelected;
  7. FROM AES IMPORT FormAlert,GrafMouse,MenuTitleNormal,ResourceGetAddr,
  8.                 MenuItemEnable,ObjectChange;
  9. FROM GEMAESbase IMPORT HourGlass,Arrow,Selected,Normal,RTree;
  10. FROM ConvertStr IMPORT StrToInt,IntToStr;
  11. FROM Liste IMPORT SetValue,GetValue,EnterElement, AppendElement,Next,
  12.                   Prev,AtFirst,First,AtLast,Empty,RemoveElement,KillList,
  13.                   MakeList;
  14. FROM MathLib0 IMPORT sqrt;
  15. FROM Mathbase IMPORT real,entier;
  16. FROM RealInOut IMPORT WriteReal;FROM InOut IMPORT WriteInt;
  17.  
  18. FROM MBIO IMPORT MBList,LoadList,SaveList,RunExtern,MergeList;
  19. VAR String      : ARRAY [1..160]OF CHAR;
  20.     ENDE        : BOOLEAN;
  21.     ResultArray : FrequenzGangARRAY;
  22.     EditAdresse :ADDRESS;
  23.  
  24. VAR  StepXofN :INTEGER;
  25.  
  26. PROCEDURE Dauer(FreqGang: FrequenzGangARRAY ): INTEGER;
  27. VAR  Zaehler : INTEGER;
  28.      f1,f2   : LONGINT;
  29.      DaueR,
  30.      MittelFrequenz : REAL;
  31. BEGIN
  32.    IF (FreqGang[1] = FreqGang[2]) OR (FreqGang[3] =0) THEN
  33.      RETURN FreqGang[3];
  34.    ELSE
  35.     MittelFrequenz := sqrt(real(FreqGang[1]) * real(FreqGang[2]));
  36.     f1:= 50000D DIV VAL(LONGINT, FreqGang[1]);
  37.     f2:= 50000D DIV VAL(LONGINT, FreqGang[2]);
  38.     Zaehler:=0;
  39.     DaueR:=0.0;
  40.    END(*IF*);
  41.    IF FreqGang[1]<FreqGang[2] THEN   (*Up*)
  42.        REPEAT
  43.           Zaehler:= Zaehler+1;
  44.          (* FreqGang[1]:=FreqGang[1]+FreqGang[3];*)
  45.           f1:=f1-VAL(LONGINT,FreqGang[3]);
  46.        UNTIL f1<=f2;
  47.    ELSIF FreqGang[1]>FreqGang[2] THEN (*down*)
  48.        REPEAT
  49.           Zaehler:= Zaehler+1;
  50.           (*FreqGang[1]:=FreqGang[1]-FreqGang[3];*)
  51.           f1:=f1+VAL(LONGINT,FreqGang[3]);
  52.        UNTIL f1>=f2;
  53.    END(*IF*);
  54.    DaueR:= real(Zaehler)*2.0/MittelFrequenz;
  55.    WriteInt( entier (DaueR),10);
  56.    RETURN entier (DaueR);
  57. END Dauer;
  58.  
  59. PROCEDURE GetDialogResult(VAR Result :FrequenzGangARRAY);
  60. VAR String :ARRAY [0..1] OF CHAR;
  61.        OK  :BOOLEAN;
  62.        l   :INTEGER;
  63. PROCEDURE ButtonToInt(First,Last:INTEGER):INTEGER;
  64. VAR i,j,k :INTEGER;
  65. BEGIN
  66.   j:=1;
  67.   k:=0;
  68.   FOR i := First TO Last DO
  69.     IF IsSelected(i,EditAdresse) THEN
  70.        k:= k+j;
  71.     END(*IF*);
  72.   j:= j*2;
  73.   END(*FOR*);
  74.   RETURN k;
  75. END ButtonToInt;
  76.  
  77. BEGIN
  78.     GetText(ANFREQ,EditAdresse, String);
  79.     StrToInt(String,Result[1],OK);
  80.     GetText(ENDFREQ,EditAdresse, String);
  81.     StrToInt(String,Result[2],OK);
  82.     GetText(GESCHWIN,EditAdresse, String);
  83.     StrToInt(String,Result[3],OK);
  84.     Result[4]:=ButtonToInt(A1,A8);
  85.     Result[5]:=ButtonToInt(B1,B8);
  86.     Result[6]:=ButtonToInt(C1,C8);
  87.     Result[7]:=ButtonToInt(D1,D8);
  88.     Result[9]:=StepXofN;
  89.     Result[10]:=Dauer(Result);
  90. END GetDialogResult;
  91.  
  92. PROCEDURE SetDialogResult(VAR Result :FrequenzGangARRAY);
  93. VAR String :ARRAY [0..2] OF CHAR;
  94.     StepStr:ARRAY [0..4] OF CHAR;
  95.        OK  :BOOLEAN;
  96.        l   :INTEGER;
  97. PROCEDURE IntToButton(First,Last,Res:INTEGER);
  98. VAR i,j,k :INTEGER;
  99. BEGIN
  100.   j:=1;
  101.   k:=0;
  102.   FOR i := First TO Last DO
  103.     k:=k+j;
  104.     IF and(k,Res ) THEN
  105.        ObjectChange(EditAdresse,i,0,1,2,3,4,Selected,1);
  106.        Res:=Res-j;
  107.     ELSE
  108.        ObjectChange(EditAdresse,i,0,1,2,3,4,Normal,1);
  109.     END(*IF*);
  110.     j:= j*2;
  111.   END(*FOR*);
  112. END IntToButton;
  113.  
  114. BEGIN
  115.     IntToStr(Result[1],2,String,OK);
  116.     String[0]:=String[1]; String[1]:=String[2]; String[2]:=0C;
  117.     SetText(ANFREQ,EditAdresse, String);
  118.     IntToStr(Result[2],2,String,OK);
  119.     String[0]:=String[1]; String[1]:=String[2]; String[2]:=0C;
  120.     SetText(ENDFREQ,EditAdresse, String);
  121.     IntToStr(Result[3],2,String,OK);
  122.     String[0]:=String[1]; String[1]:=String[2]; String[2]:=0C;
  123.     SetText(GESCHWIN,EditAdresse, String);
  124.     IntToButton(A1,A8, Result[4]);
  125.     IntToButton(B1,B8, Result[5]);
  126.     IntToButton(C1,C8, Result[6]);
  127.     IntToButton(D1,D8, Result[7]);
  128.     IntToStr(Result[9],3,StepStr,OK);
  129.     StepStr[0]:=StepStr[1]; StepStr[1]:=StepStr[2];
  130.     StepStr[2]:=StepStr[3]; StepStr[3]:=StepStr[4]; StepStr[4]:=0C;
  131.     SetText(STEPXOFN,EditAdresse, StepStr);
  132.     IntToStr(Result[10],2,StepStr,OK);
  133.     IF OK THEN
  134.       StepStr[0]:=StepStr[1]; StepStr[1]:=StepStr[2];
  135.       StepStr[2]:=StepStr[3]; StepStr[3]:=StepStr[4]; StepStr[4]:=0C;
  136.       SetText(DAUER,EditAdresse, StepStr);
  137.     END(*IF*);
  138. END SetDialogResult;
  139.  
  140.  
  141. PROCEDURE Editiere;
  142. VAR formret:INTEGER;
  143.    I:INTEGER; Done:BOOLEAN;
  144.    NullResultArray : FrequenzGangARRAY;
  145.  
  146. BEGIN
  147.    FOR I:= 1 TO 10 DO NullResultArray[I]:=0 END(*FOR*);
  148.    formret:=0;
  149.    IF ~Empty(MBList) THEN
  150.        First(MBList);
  151.        Done:=GetValue(MBList,ResultArray);
  152.        SetDialogResult(ResultArray);
  153.    ELSE
  154.        GetDialogResult(ResultArray);
  155.    END(*IF*);
  156.    WHILE formret#OKAY DO
  157.             formret:=DoMoveDialog(EditAdresse,ANFREQ);
  158.             IF (formret#CANCEL) THEN
  159.                GetDialogResult(ResultArray);
  160.                IF (formret=NEXT) THEN
  161.                  IF AtLast(MBList)THEN
  162.                     AppendElement(MBList);
  163.                     SetValue(MBList,ResultArray);
  164.                     NullResultArray[1]:=ResultArray[2];
  165.                     SetDialogResult(NullResultArray);
  166.                  ELSE
  167.                    SetValue(MBList,ResultArray);
  168.                    Next(MBList);
  169.                    Done:=GetValue(MBList,ResultArray);
  170.                    SetDialogResult(ResultArray);
  171.                  END(*IF*);
  172.                ELSIF  (formret=PREVIOUS) THEN
  173.                  IF AtFirst(MBList)THEN
  174.                     EnterElement(MBList);
  175.                     SetValue(MBList,ResultArray);
  176.                     SetDialogResult(NullResultArray);
  177.                  ELSIF  AtLast(MBList)THEN
  178.                     AppendElement(MBList);
  179.                     SetValue(MBList,ResultArray);
  180.                     Prev(MBList); Prev(MBList);
  181.                     Done:=GetValue(MBList,ResultArray);
  182.                     SetDialogResult(ResultArray);
  183.                  ELSE
  184.                    SetValue(MBList,ResultArray);
  185.                    Prev(MBList);
  186.                    Done:=GetValue(MBList,ResultArray);
  187.                    SetDialogResult(ResultArray);
  188.                  END(*IF*);
  189.                ELSIF formret=DELETE  THEN
  190.                     RemoveElement(MBList);
  191.                     Done:=GetValue(MBList,ResultArray);
  192.                     SetDialogResult(ResultArray);
  193.                ELSIF formret=INSERT THEN
  194.                     EnterElement(MBList);
  195.                     SetValue(MBList,ResultArray);
  196.                END(*IF*);
  197.             ELSE (* Formret = CANCEL *)
  198.               SetDialogResult(ResultArray);
  199.             END(*IF*);
  200.     END(*WHILE*);
  201. END Editiere;
  202.  
  203. PROCEDURE Teste;
  204. VAR formret:INTEGER;
  205.  
  206. BEGIN
  207.     formret:=DoMoveDialog(EditAdresse,ANFREQ);
  208.     IF formret= OKAY THEN
  209.         GetDialogResult(ResultArray);
  210.         Change(ResultArray);
  211.     END(*IF*);
  212. END Teste;
  213.  
  214. PROCEDURE  MenueEreignis(msgret:INTEGER;menueadresse:ADDRESS):BOOLEAN;
  215. VAR formret,fsel:INTEGER;
  216.     SoundDiaAdrr : ADDRESS;
  217.     AboutAdresse,BuecherAdresse,ContraAdresse,
  218.     HardwAdresse :ADDRESS;
  219.  
  220. BEGIN
  221.  ResourceGetAddr(0,MBEDIT,EditAdresse);
  222.  ResourceGetAddr(RTree,ABOUTDIA,AboutAdresse);
  223.  ResourceGetAddr(RTree,LITERDIA,BuecherAdresse);
  224.  ResourceGetAddr(RTree,GEGENDIA,ContraAdresse);
  225.  ResourceGetAddr(RTree,HARDWDIA,HardwAdresse);
  226.  String :='[3][Ist Die Brille|  angeschlossen ?][  OK  |ABRUCH]';
  227.  
  228.  ENDE:=FALSE;
  229.  CASE msgret OF
  230.    ABOUT     : formret:=DoMoveDialog(AboutAdresse,0);
  231.  
  232.  | QUIT      : String :='[3][Wollen Sie das Programm|  Verlassen ?][  OK  |ABBRUCH]';
  233.                formret:=FormAlert(1,String);
  234.                IF formret = 1 THEN
  235.                    ENDE := TRUE;
  236.                END(*IF*);
  237.  | EDIT      : Editiere;
  238.                MenuItemEnable(menueadresse,XSESSION,1);
  239.                MenuItemEnable(menueadresse,VERLAUF,1)
  240.  | LOAD      : LoadList;
  241.                MenuItemEnable(menueadresse,XSESSION,1);
  242.                MenuItemEnable(menueadresse,VERLAUF,1)
  243.  | SAVE      : SaveList;
  244.  | MERGE     : MergeList;
  245.  | NEW       : KillList(MBList);
  246.                MakeList(MBList);
  247.                MenuItemEnable(menueadresse,XSESSION,0);
  248.                MenuItemEnable(menueadresse,VERLAUF,0)
  249.  | XSESSION  : GrafMouse(HourGlass,menueadresse);
  250.                formret:=FormAlert(1,String);
  251.                IF formret = 1 THEN
  252.                   RunExtern;
  253.                END(*IF*);
  254.                GrafMouse(Arrow,menueadresse);
  255.  | TEST      : Teste;
  256.  | VERLAUF   : String :='[0][ Verlauf| Not yet implemented |  Christian   Ledermann| ver 0.0 vom 25.02.93 ][  OK  ]';
  257.                formret:=FormAlert(1,String);
  258.  | MIDSUMME  : GrafMouse(HourGlass,menueadresse);
  259.                formret:=FormAlert(1,String);
  260.                IF formret = 1 THEN
  261.                  MidsummerNight;
  262.                END(*IF*);
  263.                GrafMouse(Arrow,menueadresse);
  264.  | HYPNOSYN  : GrafMouse(HourGlass,menueadresse);
  265.                formret:=FormAlert(1,String);
  266.                IF formret = 1 THEN
  267.                  LutzMehlhorn;
  268.                END(*IF*);
  269.                GrafMouse(Arrow,menueadresse);
  270.  | HARALDW   : GrafMouse(HourGlass,menueadresse);
  271.                formret:=FormAlert(1,String);
  272.                IF formret = 1 THEN
  273.                   HaraldWessbacher;
  274.                END(*IF*);
  275.                GrafMouse(Arrow,menueadresse);
  276.  | EARTHHAR  : GrafMouse(HourGlass,menueadresse);
  277.                formret:=FormAlert(1,String);
  278.                IF formret = 1 THEN
  279.                  EarthHarmonie;
  280.                END(*IF*);
  281.                GrafMouse(Arrow,menueadresse);
  282.  | ALLGBENU  : GrafMouse(HourGlass,menueadresse);
  283.                formret:=FormAlert(1,String);
  284.                IF formret = 1 THEN
  285.                  AllgBenutzung;
  286.                END(*IF*);
  287.                GrafMouse(Arrow,menueadresse);
  288.  | RUHEWACH  : GrafMouse(HourGlass,menueadresse);
  289.                formret:=FormAlert(1,String);
  290.                IF formret = 1 THEN
  291.                  RuhevolleWachheit;
  292.                END(*IF*);
  293.                GrafMouse(Arrow,menueadresse);
  294.  | ANREGUNG  : GrafMouse(HourGlass,menueadresse);
  295.                formret:=FormAlert(1,String);
  296.                IF formret = 1 THEN
  297.                    Anregung;
  298.                END(*IF*);
  299.                GrafMouse(Arrow,menueadresse);
  300.  | HELP      : String :='[0][ Hilfe| Not yet implemented |  Christian   Ledermann| ver 0.0 vom 25.02.93 ][  OK  ]';
  301.                formret:=FormAlert(1,String);
  302.  | TON       : String :='[0][ Ton| Not yet implemented |  Christian   Ledermann| ver 0.0 vom 25.02.93 ][  OK  ]';
  303.                formret:=FormAlert(1,String);
  304.                ResourceGetAddr(0,SOUNDDIA,SoundDiaAdrr);
  305.                formret:= DoMoveDialog(SoundDiaAdrr,0);
  306.  | MAGNET    : String :='[0][ Magnet| Not yet implemented |  Christian   Ledermann| ver 0.0 vom 25.02.93 ][  OK  ]';
  307.                formret:=FormAlert(1,String);
  308.  | BUECHER   : formret:=DoMoveDialog(BuecherAdresse,0);
  309.  | LEDS      : String :='[0][ LEDs| Not yet implemented |  Christian   Ledermann| ver 0.0 vom 25.02.93 ][  OK  ]';
  310.                formret:=FormAlert(1,String);
  311.  | HARDWARE  : formret:=DoMoveDialog(HardwAdresse,0);
  312.  | GEGENANZ  : formret:=DoMoveDialog(ContraAdresse,0);
  313.  
  314.  
  315.  
  316.  ELSE
  317.      ENDE := FALSE;
  318.  END (*CASE*);
  319.  MenuTitleNormal(menueadresse,DATEI,1);
  320.  MenuTitleNormal(menueadresse,DESK,1);
  321.  MenuTitleNormal(menueadresse,SESSION,1);
  322.  MenuTitleNormal(menueadresse,EXTRAS,1);
  323.  MenuTitleNormal(menueadresse,OPTIONS,1);
  324.  
  325. RETURN ENDE;
  326. END MenueEreignis;
  327.  
  328.  
  329.  
  330. END MenuEvnt.
  331.